iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 15
1
Big Data

體育競賽及日常生活裏遇到的數據收集及分析系列 第 15

體育競賽資料收集器:快速壘球篇之二

  • 分享至 

  • xImage
  •  

棒球記錄方法說明,
其精神是一球入魂,白話講解,是一球的生命歷程,從出生,到結束。
因為是日誌式的記錄,所以如何定義一球,這是按不同的人,設計系統,
會有不同的概念,甚至紙本記錄法,就不見得是這種記法,記重點事件發生的上下局,
因為是關聯式資料庫,所以重視各資料表間的關聯。

所謂記錄的一球,意指投手投出的一球,直到下一球投出前。
然後,以這一球做為關聯的key,串起所有發生的事件。

一球的生命歷程

球場照片來自於

舉例來說,投手投出一球,假設這球的id是13,這個id就一直用於各事件的記錄。
例如,投出偏內角的球,打者打出左外壘安打,落地後被外壘手接到,傳往一壘,打者於跑向一壘時,
被剌殺於一壘,這以這顆id是13的球,產生了,投球記錄(record)一筆,打擊揮棒記錄,傳球記錄,
跑壘記錄,

狀況一:投手接球後,並不投球,而是牽制壘上的跑者,這時,球的id仍是13,並沒有加1,只有
投給打者打的球,才是
一球
,這也有所謂的投手用球數的問題,拿來練投牽制的投球,
並不計入用球數。或是活球死球的概念,以快速壘球而言,盜壘必須等投手投出才能開盜,
和棒球不一樣,棒球的壘上跑者,可以不斷離壘來干擾投手,或是伺機盜壘。

**狀況二:**補手接球後,牽制,也算在同一球內。

狀況三:更換選手時,仍算在同一球內。雖然這時沒有球的移動。同理,暫停,五局休息(壘球只打
7局,無中場休息,且常常是
限時
比賽,5,6局結束也有),感覺是獨立的事件,皆計入同一球。

這種規格,不是筆者制定的,第一個訂定的人,不知是誰,筆者決定這樣設計也不錯。

以這樣的概念,就借用laravel 開一下table。

Schema::create('balls', function (Blueprint $table) {
    $table->increments('id');  
    $table->integer('match_id');
    $table->integer('ball_id');  //目前進行的球,編號
    $table->string('inning');    //目前的局,分一上/一下,二上/二下…九上/九下
    $table->integer('inning_ball_id')->nullable(); //每局用球,新局開始時歸0

    $table->timestamps();
});

Schema::create('pitchers', function (Blueprint $table) { //投球記錄
    $table->increments('id');
    $table->integer('gid'); //替代 ball_id + matchid
    $table->string('pitcher'); //投手
    $table->string('strike'); //1好,2好,
    $table->string('position'); //九宮格
    $table->integer('x')->nullable(); //x座標
    $table->integer('y')->nullable(); //y座標
    $table->string('kind');   //曲球,伸卡球,直球
    $table->string('velocity');  //速度,快,中,慢
    $table->integer('speed')->nullable(); //球速
    $table->string('condition');  
    $table->string('result'); 
    $table->timestamps();
});

Schema::create('hitters', function (Blueprint $table) { //打擊記錄
    $table->increments('id');
    $table->integer('gid'); //替代 ball_id + matchid
    $table->string('hitter');
    $table->string('result'); 
    $table->string('track');
    $table->integer('x')->nullable();
    $table->integer('y')->nullable();
    $table->string('position');
    $table->integer('hitpoint')->nullable();
    $table->string('memo')->nullable(); //界外(本壘後),右方,左方,揮空,擦棒,不揮,
    $table->timestamps();
});

  Schema::create('fielders', function (Blueprint $table) { //接球及傳球記錄
    $table->increments('id');
    $table->integer('gid'); //替代 ball_id + matchid
    $table->string('passball'); //牽制 傳球
    $table->string('from'); // 傳出 牽制 傳球
    $table->string('from_player'); //牽制 傳球
    $table->string('to'); // 接球 牽制 傳球
    $table->string('to_player'); //牽制 傳球
    $table->string('error');
    $table->string('result'); //失誤,漏接,先判斷第一接球者是
    $table->string('memo');
    $table->timestamps();
});

Schema::create('runners', function (Blueprint $table) { //跑壘球錄
    $table->increments('id');
    $table->integer('gid'); //替代 ball_id + matchid
    $table->string('runner');
    $table->string('from');  //一,二,三,本
    $table->string('to');    //一,二,三,本
    $table->integer('score'); //誰跑回來得分  盜壘
    $table->string('result');
    $table->string('error');
    $table->string('memo');
    $table->timestamps();
});

上一篇
體育競賽資料收集器:快速壘球篇之一
下一篇
體育競賽資料收集器:快速壘球篇之三
系列文
體育競賽及日常生活裏遇到的數據收集及分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言